package com.apkicon.parser;

import com.apkicon.model.ApkInfo;
import java.io.File;
import java.util.zip.ZipFile;

/**
 * APK解析器
 * 按照Android原生原理解析APK文件并提取图标资源信息
 */
public class ApkParser {
    
    /**
     * 解析APK文件，按照Android原生图标解析原理
     */
    public static ApkInfo parseApk(File apkFile) throws Exception {
        System.out.println("🔍 开始解析APK: " + apkFile.getName());
        
        try (ZipFile zipFile = new ZipFile(apkFile)) {
            // 1. 尝试解析AndroidManifest.xml（如果失败则使用fallback）
            AndroidManifestParser.AppIconInfo appIconInfo = null;
            try {
                appIconInfo = AndroidManifestParser.parseAppIcon(zipFile);
                System.out.println("✅ 成功解析AndroidManifest.xml");
            } catch (Exception e) {
                System.out.println("⚠️ AndroidManifest.xml解析失败，使用fallback模式: " + e.getMessage());
                // 使用fallback模式，通过常见图标命名模式查找
                appIconInfo = createFallbackAppIconInfo();
            }
            
            // 2. 根据图标引用查找最佳图标资源
            IconResource bestIconResource = AndroidResourceResolver.findBestIconResource(zipFile, appIconInfo);
            
            if (bestIconResource == null) {
                throw new Exception("No suitable icon resource found");
            }
            
            // 3. 创建APK信息对象
            return new ApkInfo(apkFile, bestIconResource, appIconInfo);
        }
    }
    
    /**
     * 创建fallback应用图标信息
     */
    private static AndroidManifestParser.AppIconInfo createFallbackAppIconInfo() {
        // 使用常见的应用图标名称
        return new AndroidManifestParser.AppIconInfo("@mipmap/ic_launcher", null, false);
    }
    
}